/*
    created: 2023/4/21  
    filename: threaded_btree.h
    author： 李东霖
    purpose: 线索二叉树的构建实现
    备注：他的线索化类似于他的遍历，一样是递归然后处理他的前驱和自己  
    但是要注意最后一个结点。
*/

#ifndef _THREADED_BTREE_H_
#define _THREADED_BTREE_H_


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXSIZE 50
#define  ElemType char

//数据结构
typedef struct node
{
    ElemType data;
    struct node* lchild;
    struct node* rchild;
    unsigned char ltag;
    unsigned char rtag;
}TBTNode,*TBTTree;

//采用括号表示法创建二叉树  返回值 -1-传入参数为空 0-成功
int CreateBTree(TBTTree* tree,char *str);

//中序遍历  
void InOrder(TBTTree tree);

// 中序遍历二叉树线索化。
void CreateInThread(TBTTree TT);
// 中序遍历线索化二叉树的递归函数，参数pp是当前节点，pre是前驱结点。
void InThread(TBTTree pp,TBTNode **pre);  

//正向输出中序线索化过的二叉树
void CInOrder(TBTTree tree);

//反向输出中序线索化过的二叉树
void RInOrder(TBTTree tree);

#endif //!_THREADED_BTREE_H_